package com.insideClass.exceptions;

import com.sun.xml.internal.bind.v2.runtime.reflect.opt.Const;

class NeedsCleanup{
    private static long counter=1;
    private final long id=counter++;
    public void dispose(){
        System.out.println("NeedsCleanup"+id+"disposed");
    }
}
class ConstructionException extends Exception{

}
class NeedsCleanup2 extends NeedsCleanup{
    public NeedsCleanup2() throws ConstructionException{

    }

}
/**
 * @author 13699
 */
public class CleanupIdiom {
    public static void main(String[] args) {
        NeedsCleanup nc1=new NeedsCleanup();
        try{

        }finally {
            nc1.dispose();
        }
        NeedsCleanup nc2=new NeedsCleanup();
        NeedsCleanup nc3=new NeedsCleanup();
        try{

        }finally {
            nc3.dispose();
            nc2.dispose();
        }
        try{
            NeedsCleanup2 nc4=new NeedsCleanup2();
            try{
                NeedsCleanup2 nc5=new NeedsCleanup2();
                try{

                }finally {
                    nc5.dispose();
                }
            }catch (ConstructionException e){
                System.out.println(e);
            }finally {
                nc4.dispose();
            }
        }catch (ConstructionException e){
            System.out.println(e);
        }
    }
}
